home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 46 / Amiga Format CD46 (1999-10-20)(Future Publishing)(GB)[!][issue 1999-12].iso / -serious- / programming / other / tandem / teaching / 25.asm < prev    next >
Assembly Source File  |  1999-09-06  |  2KB  |  54 lines

  1. * 25.asm      Open a screen       version 0.00   1.9.97
  2.  
  3. * this program illustrates the use of tags. Instead of passing a structure
  4. * to OpenScreen, you pass tags for whatever you want. All possible tags
  5. * that remain unpassed get default values. See under "Screens" in the
  6. * ROM Kernal Manual. I chose to send the 5 tags below. I pushed the tags
  7. * into the stack, and then discarded them after opening the screen.
  8.  
  9. * For tag details, see the autodoc for intuition.library _LVOOpenScreen
  10.  
  11.  include 'Front.i'         ;*** Change to Tandem.i to step thru TL's ***
  12.  
  13. strings: dc.b 0
  14. st_1: dc.b 'My screen!  (please wait a couple of seconds)',0       ;1
  15.  ds.w 0
  16.  
  17. pens: dc.l -1              ;default pens structure
  18.  
  19. Program:
  20.  sub.l #6*8+4,a7           ;room for 6 tags (8 bytes per tag + 4 at end)
  21.  move.l a7,a0
  22.  move.l #SA_Width,(a0)+    ; 1st tag: width=same as display clip
  23.  move.l #STDSCREENWIDTH,(a0)+
  24.  move.l #SA_Height,(a0)+   ; 2nd tag: height=same as display clip
  25.  move.l #STDSCREENHEIGHT,(a0)+
  26.  move.l #SA_Depth,(a0)+    ; 3rd tag: depth=2 (depth 2 = 4 colours)
  27.  move.l #2,(a0)+
  28.  move.l #SA_Pens,(a0)+     ; 4th tag: pass SA_Pens to get 3D look
  29.  move.l #pens,(a0)+
  30.  move.l #SA_Title,(a0)+    ; 5th tag: send title
  31.  move.l #st_1,(a0)+
  32.  move.l #SA_DisplayID,(a0)+ ; 6th tag: display (hires)
  33.  move.l #HIRES_KEY,(a0)+
  34.  move.l #TAG_DONE,(a0)     ;delimit tag list
  35.  move.l xxp_intb(a4),a6
  36.  sub.l a0,a0               ;a0 is null, since no NewScreen structure
  37.  move.l a7,a1              ;a1 points to taglist
  38.  jsr _LVOOpenScreenTagList(a6) ;open screen
  39.  add.l #6*8+4,a7           ;discard tag list, restore stack
  40.  tst.l d0
  41.  beq.s Pr_bad              ;go if couldn't open screen
  42.  move.l d0,-(a7)           ;save screen pointer (for later closing)
  43.  move.l xxp_dosb(a4),a6
  44.  move.l #200,d1
  45.  jsr _LVODelay(a6)         ;wait about 4 seconds (=200 intuiticks)
  46.  move.l (a7)+,a0           ;a0=screen (for closing)
  47.  move.l xxp_intb(a4),a6
  48.  jsr _LVOCloseScreen(a6)   ;close screen
  49.  rts                       ;& return good
  50. Pr_bad:
  51.  sub.l a0,a0
  52.  jsr _LVODisplayBeep(a6)   ;if bad, beep existing screens
  53.  rts                       ;& return bad
  54.